﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>等待状态栏 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 等待状态栏 function waits 直到 a window's status bar contains the specified 字符串." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>
 
<h1>等待状态栏</h1>

<p>等待, 直到窗口的状态栏包含指定的字符串.</p>

<pre class="Syntax"><span class="func">等待状态栏</span> <span class="optional">BarText, Timeout, Part#, WinTitle, WinText, Interval, ExcludeTitle, ExcludeText</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>BarText</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>此函数所等待的文本或部分文本. 默认为空, 这意味着等待状态栏变成空的. 此文本是区分大小写的, 且匹配行为由 <a href="SetTitleMatchMode.htm">设置标题匹配模式</a> 决定, 类似于下面的 <em>WinTitle</em>.</p>
    <p>若要等待状态栏是否发生了 <em>改变</em>, 可以在循环中使用 <a href="StatusBarGetText.htm">获取状态栏文本</a>, 或像本页底部的例子那样使用 RegEx.</p>
  </dd>
  
  <dt>Timeout</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a>或<a href="../Concepts.htm#numbers">浮点数</a></p>
    <p>在超时前等待的秒数(可以是小数), 在这种情况下返回 0(false). 默认为空, 这意味着命令将会无限期等待.</p>
  </dd>
  
  <dt>Part#</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>要获取的状态栏的那一部分的编号. 默认为 1, 这部分通常包含了我们感兴趣的文本.</p>
  </dd>

  <dt>WinTitle</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a>, <a href="../Concepts.htm#numbers">整数</a>或<a href="../Objects.htm">对象</a></p>
    <p>识别目标窗口的窗口标题或其他条件. 请参阅 <a href="../misc/WinTitle.htm">WinTitle</a>.</p>
  </dd>

  <dt>WinText</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>如果存在, 此参数必须是目标窗口的单个文本元素的子字符串(和内置的 Window Spy 工具显示的一样). 如果 <a href="DetectHiddenText.htm">检测隐藏文本</a> 为 ON, 那么会检测隐藏文本元素.</p>
  </dd>

  <dt>Interval</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>此函数在等待时对状态栏进行检查的时间间隔(单位为毫秒). 默认为 50. </p>
  </dd>

  <dt>ExcludeTitle</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>标题中含有此参数值的窗口将被排除.</p>
  </dd>

  <dt>ExcludeText</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>文本中含有此参数值的窗口将被排除.</p>
  </dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#boolean">整数(布尔值)</a></p>
<p>如果找到匹配, 该函数返回 1(true), 如果函数超时, 则返回 0(false).</p>

<h2 id="Error_Handling">错误处理</h2>
<p>在以下任何一种情况下, 都会抛出异常:</p>
<ul>
  <li>找不到目标窗口或不包含标准状态栏.</li>
  <li>在发送 SB_GETPARTS 消息时出现了问题, 或者在 2000ms 内没有收到回复.</li>
  <li>在拥有状态栏的进程中无法分配内存.</li>
</ul>

<h2 id="Remarks">备注</h2>
<p>等待状态栏 尝试读取窗口中首个 <em>standard</em> 状态栏(类名 msctls_statusbar32). 某些程序使用它们自己的状态栏或微软通用控件的特殊版本. 不支持这样的状态栏.</p>
<p>在大多数时候, 与其在循环中使用 <a href="StatusBarGetText.htm">获取状态栏文本</a>, 不如使用 等待状态栏 来的有效率, 因为它包含了优化, 以避免重复调用 <a href="StatusBarGetText.htm">获取状态栏文本</a> 所带来的开销.</p>
<p>等待状态栏 在开始等待匹配前会确定它的目标窗口. 如果那个目标窗口关闭了, 那么此命令会停止等待, 即使存在另一个匹配指定 <em>WinTitle</em> 和 <em>WinText</em> 的窗口.</p>
<p>当函数处于等待状态时, 可以通过<a href="../Hotkeys.htm">热键</a>, <a href="../objects/Menu.htm">自定义菜单项</a>或<a href="SetTimer.htm">计时器</a>启动新的<a href="../misc/Threads.htm">线程</a>.</p>
<p>窗口标题和文本是区分大小写的. 除非 <a href="DetectHiddenWindows.htm">检测隐藏窗口</a> 被打开, 否则不会检测隐藏窗口.</p>

<h2 id="Related">相关</h2>
<p><a href="StatusBarGetText.htm">获取状态栏文本</a>, <a href="WinGetTitle.htm">获取窗口标题</a>, <a href="WinGetText.htm">获取窗口文本</a>, <a href="ControlGetText.htm">获取控件文本</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExSearch">
<p><a href="#ExSearch">#1</a>: 下面的示例将在现有的资源管理器/搜索窗口中输入新的搜索模式.</p>
<pre>如果 窗口存在("Search Results") <em>; 设置上次找到的窗口以简化后面的代码.</em>
{
    激活窗口
    发送 "{tab 2}!o*.txt{enter}"  <em>; 在搜索窗口中, 输入要搜索的模式.</em>
    等待 400  <em>; 给状态栏时间, 等它改变为 &quot;Searching&quot;.</em>
    如果 等待状态栏("found", 30)
        信息框 "The search successfully completed."
    否则
        信息框 "The function timed out."
}</pre>
</div>

<div class="ex" id="ExChange">
<p><a href="#ExChange">#2</a>: 下面的例子等待活动窗口的状态栏 <strong>发生变化</strong>.</p>
<pre>设置标题匹配模式 "RegEx"  <em>; 接受<a href="SetTitleMatchMode.htm#RegEx">正则表达式</a>, 以便在下面使用.</em>
如果 窗口存在("A")  <em>; 设置上次找到的窗口为活动窗口(供下面使用).</em>
{
    <span class="red">OrigText</span> := 获取状态栏文本()
    等待状态栏 "^(?!^\Q" <span class="red">OrigText</span> "\E$)"  <em>; 该正则表达式等待文本发生任何变化.</em>
}</pre>
</div>

</body>
</html>